home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / misc_pto / 29ksim / demo.s < prev    next >
Text File  |  1987-11-30  |  4KB  |  186 lines

  1.      .title    "Demo.s -- Test file for 29K-Soft"
  2.  
  3.  
  4. ;********************************************************************
  5.  
  6. ;    Am29000 Demonstratio Software Version 1.0
  7.  
  8. ;*********************************************************************
  9.  
  10.            .global    main
  11.  
  12.       .nolistmx
  13.       .nolistsym
  14.     .nolisttx
  15.       .nolistix
  16.  
  17.       .include    "trap.h"
  18.       .include    "sr.h"
  19.       .include    "macro.h"
  20.  
  21. PUTSTR    .macro    straddr        ; Get pointer to memory buffer
  22.     const    gr60,straddr
  23.     call        gr5b,puts
  24.     consth    gr60,straddr>>16
  25.     .endm
  26.  
  27. GETSTR    .macro    straddr,endaddr        ; Get pointer to memory buffer
  28.     const    gr60,straddr
  29.     consth    gr60,straddr>>16
  30.     const    gr5f,(endaddr-4)
  31.     call        gr5b,gets
  32.     consth    gr5f,(endaddr-4)>>16
  33.     .endm
  34.  
  35. ;      .list
  36.  
  37. data    .seg    data,absolute 6000#h        ; memory
  38.     .use    data
  39. String1:
  40.     .textz    "\n\n\n\n\n\n\n\nAm29000 Demo Program\n\n\n\n\n\nWelcome to the world of 17+MIPS demo'ed at .0001 MIPS\n\n\nWhat is your name? "
  41.     .align
  42. Response:
  43.     .textz    "\n\nImagine this running 170,000 times faster, "
  44.     .align
  45. Pressany:
  46.     .textz    "\n\nPress Any Key"
  47.     .align
  48. Keybuff:
  49.     .block    128
  50. KeyEnd:
  51.     .word    0
  52.  
  53.  
  54. code    .seg    code,absolute 01000#h /* */
  55.       .use    code
  56.  
  57. no    .equ    20#h    ;control byte for load or store no xlate in super mode
  58. yes    .equ    0    ;control byte for load or store xlate ok
  59. lsbyte    .equ    30#h    ;control for load or store to set Byte Pointer, no xlate
  60.  
  61. LOOPCOUNT    .equ    500    ; counter through loop
  62.  
  63. ;    This is a simple demo program to test the simulator I/O ability.
  64. ;
  65. ;;;;;;;;;;;;;;;;;;;;
  66. main:
  67. ;;;;;;;;;;;;;;;;;;;;
  68.  
  69.  
  70.     .listmx
  71.  
  72.  
  73.  
  74.     PUTSTR    String1
  75.  
  76.     GETSTR        Keybuff,KeyEnd
  77.  
  78.     PUTSTR        Response
  79.  
  80.     PUTSTR    Keybuff
  81.  
  82.     PUTSTR    Pressany
  83.     getchar
  84.     putchar    13
  85.     putchar    10
  86.     putchar    10
  87.  
  88.     trap    END_SUCCESS        ;all tests completed, no errors
  89.  
  90. ;;;;;;;;;;;;;;;
  91. error:
  92. ;;;;;;;;;;;;;;;
  93.     trap    END_FAIL        ; failed something
  94.       nop
  95.       nop
  96.       
  97. ;;;;;;;;;;;;;;;;
  98.  
  99. gets:
  100. /*
  101.     Enter with gr60 pointing at start of buffer and gr5f pointing at end.
  102.     Rignt not must start on even word boundry !!!
  103.     Should be rewritten to use Byte Pointer loading bit in load store and
  104.     use BP register and not ALU status.
  105. */
  106. ;;;;;;;;;;;;;;;;
  107.  
  108.     const    gr55,0                ; initialize byte counter/pointer
  109.     add    gr57,gr60,0            ; make copy of pointer
  110.  
  111. gsloop:
  112.  
  113.     load        lsbyte,gr58,gr60    ; give lots of time!
  114.  
  115. ;    set up for byte insert instruction - just to use it and learn it!
  116.  
  117.     getchar                    ; returned as byte in gr02
  118.     asneq    PUTCHAR,gr01,gr01    ; echo
  119.  
  120.     and        gr41,gr02,0ff#h    ; clear all but lower byte
  121.     cpeq        gr54,gr41,0d#h        ; compare with carriage return!
  122.     jmpf        gr54,noterm        ; no, so continue
  123.     nop
  124.     putchar    13
  125.     putchar    10
  126.     const    gr41,0            ; terminate with a zero!
  127. noterm:
  128.     inbyte    gr58,gr58,gr41        ; stuff byte into word
  129.     store    lsbyte,gr58,gr60        ; save it in keyboard buffer
  130.     jmpti    gr54,gr5b            ; Return if done
  131.  
  132. ; Now to update pointer
  133.     cpge        gr56,gr60,gr5f            ; check for past buffer!
  134.     jmpf        gr56,gsloop            ; continue if not past!
  135.     add        gr60,gr60,1            ; increment Byte Pointer 
  136.  
  137.     jmpi    gr5b        ; gets complete ok return to main
  138.     nop            ; after jmpi !
  139.  
  140.  
  141. ;;;;;;;;;;;;;;;;
  142.  
  143. puts:
  144. /*    Called with gr60 pointing at string to print.  Lowest two bits
  145.     select first byte
  146.     Should be rewritten to use Byte Pointer loading bit in load store.
  147. */
  148.  
  149. ;;;;;;;;;;;;;;;;
  150.  
  151.     load        lsbyte,gr58,gr60        ; give lots of time!
  152.     add        gr57,gr60,0        ; Make copy of pointer
  153.     const        gr54,0                ; clear it for extracted byte
  154.  
  155. putloop:
  156.     ;    extract set up by previous load instruction
  157.     exbyte        gr54,gr58,gr54        ; extract character from word
  158.     and        gr54,gr54,0ff#h
  159.     cpeq        gr56,gr54,0#h        ; compare with zero termination
  160.     jmpti        gr56,gr5b            ; return
  161.  
  162.     cpeq        gr56,gr54,10        ; compare with Line Feed 
  163.     jmpf        gr56,notlf
  164.     putchar        13                ; put carriage return
  165. ; Now check for need to update pointer
  166. ;    increment byte pointer
  167. notlf:
  168.     add        gr57,gr57,1    ; increment Byte Pointer 
  169.     and        gr55,gr57,11#b    ; make sure not new word
  170.     cpeq        gr56,gr55,0            ; check for overflow
  171.     jmpf        gr56,oldword        ; jump if old word
  172.     and        gr02,gr54,0ff#h        ; clear and move to gr02 for trap
  173.     load        no,gr58,gr57        ; get new word and load BP manually
  174. oldword:
  175.     mtsr        BP,gr55
  176.     trap        PUTCHAR                ; trap to put character in gr02
  177.     jmp        putloop
  178.     
  179.  
  180.     nop            ; a couple more to make sure code seg
  181.     nop            ; is big enough for simulator
  182.  
  183.  
  184.     .end
  185.  
  186.